#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>


int main()
{
    // close(1)：关闭标准输出（stdout，文件描述符 1）
    close(1);

    // 系统将最小的可用文件描述符（即 1）分配给这个新文件
    int fd = open("redir.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);

    // printf 是库函数，默认输出到 stdout（文件描述符 1）
    // 此时 stdout 已被重定向到 log.txt（因为 fd=1），所以 printf 的内容会直接写入 log.txt
    printf("fd: %d\n", fd);
    printf("hello bit\n");
    printf("hello bit\n");

    // 强制刷新
    fflush(stdout);

    // 系统调用
    const char *msg = "hello write\n";
    write(fd, msg, strlen(msg));

    // 因为 printf 是缓冲 IO，数据可能暂存在内存中, 如果关闭fd,即将printf重定向到log.txt关闭
    // 语言层缓冲区内容就不会被写到文件内核缓冲区
    close(fd);



    return 0;
}
